package com.quique.pfc.activities;

import com.quique.pfc.R;
import com.quique.pfc.datos.MoodleDao;
import com.quique.pfc.datos.Sesion;
import com.quique.pfc.servicios.MoodleService;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/** Pantalla que contiene el formulario de envio de mensajes entre usuarios */
public class MandarMensajeActivity extends Activity
{
	/** Identificador unico en moodle del usuario al que se le va a enviar el mensaje */
	int idParticipante;
	/** Nombre completo del participante al que se le va a enviar el mensaje*/
	String nombreParticipante;
	/** Contexto de la aplicacion */
	Context ctx;
	/** Input que contendra el mensaje enviado por el usuario logado */
	EditText contenidoMensaje;
	/** Widget para mostrar un mensaje de espera */
	ProgressDialog progress = null;
	
	/** Se invoca al iniciar el action: recoge los parametros del Intent y configura la vista */
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		//llamamos al constructor de la clase padre.
		super.onCreate(savedInstanceState);
		ctx = this;
		//Obtenemos los datos que nos llegan de la vista anterior
		Bundle extras = getIntent().getExtras();
        idParticipante = (extras != null) ? extras.getInt("participanteId") : null;
        nombreParticipante = (extras != null) ? extras.getString("participanteNombre") : null;
		//establecemos el xml de vista y le damos comportamiento a los botones
		configurarVista();
	}
	/**
	 * Establece el XML de vista y le da comportamiento a los botones.
	 */
	private void configurarVista()
	{
		super.setContentView(R.layout.mandar_mensaje);
		//evitamos que se ponga la pantalla en horizontal
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		//contenido del mensaje
		contenidoMensaje = (EditText)findViewById(R.id.txt_contenido_mensaje);
		//txt_enviar_mensaje_a
		TextView enviarTxt = (TextView) findViewById(R.id.txt_enviar_mensaje_a);
		final String nuevoTexto = enviarTxt.getText() + " " + nombreParticipante;
		enviarTxt.setText(nuevoTexto);
		//comportamiento para el boton volver
		final Button button = (Button) findViewById(R.id.boton_volver_mandar_mensaje);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) 
            {
            	Intent i = new Intent(
            			MandarMensajeActivity.this,
            			UsuariosActivity.class);
				
				i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				startActivity(i);
            }
        });
		//comportamiento para el boton mandar_mensaje
        final Button buttonMandarMsj = (Button) findViewById(R.id.button_enviar_msj);
        buttonMandarMsj.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) 
            {
            	//Si el contenido esta vacio, mostramos un mensaje al usuario.
        		if(contenidoMensaje == null || contenidoMensaje.getText() == null
        			|| contenidoMensaje.getText().toString() == null
        			|| "".equals(contenidoMensaje.getText()))
        		{
        			Toast.makeText(ctx, ctx.getString(R.string.mensaje_vacio), Toast.LENGTH_LONG).show();
        			return;
        		}
        		new MandarMensajeTask().execute();
            }
        });
	}
	
	/** Sale de la pantalla y vuelve al detalle de usuario */
	private void finalizar()
	{
		finish();
	}
	
	@Override
	public void onBackPressed()
	{
		//vamos al main_activity
		Intent i = new Intent(
    			MandarMensajeActivity.this,
    			UsuariosActivity.class);
		
		i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
		startActivity(i);
	}
	
	/** Manda el mensaje al usuario mientras muestra un mensaje de espera al usuario */
	class MandarMensajeTask extends AsyncTask<String, Integer, Boolean> 
	{
		/** Manda el mensaje al usuario haciendo uso de los servicios web de moodle */
		@Override
		protected Boolean doInBackground(String... params) 
		{
			Log.i("moodle", "Se va a enviar un mensaje al usuario");
        	MoodleService mService = new MoodleService();
        	try
        	{
        		//utilizamos el moodleService para enviar el mensaje
        		mService.enviarMensaje(idParticipante, contenidoMensaje.getText().toString());
        		//mostramos un mensaje de confirmacion al usuario y volvemos
        		Log.i("moodle", "Mensaje enviado correctamente");
        	}
        	catch(Exception e)
        	{
        		return false;
        	}
			return Boolean.TRUE;   
		 }	
		/** Muestra un dialog al usuario mientras se realiza el calculo */
		@Override
		protected void onPreExecute() 
		{
			progress = ProgressDialog.show(ctx, "", ctx.getString(R.string.cargando), true);
			progress.show();
		}
		/** Metodo que se ejecuta cuando termina el calculo */
		@Override
		protected void onPostExecute(Boolean result) {
			//Cancelamos la pantalla de espera
			progress.dismiss();
			if(result)
			{
				Toast.makeText(ctx, ctx.getString(R.string.mensaje_enviado), Toast.LENGTH_LONG).show();
				Intent i = new Intent(
            			MandarMensajeActivity.this,
            			UsuariosActivity.class);
				
				i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				startActivity(i);
			}
			if(result == false)
			{
				//Si ocurre alguna excepion en el envio del mensaje:
        		//mostramos un mensaje al usuario y volvemos a la pantalla anterior
        		Log.e("moodle", "Error en el envio del mensaje.");
        		Toast.makeText(ctx, ctx.getString(R.string.mensaje_no_enviado), Toast.LENGTH_LONG).show();
        		Intent i = new Intent(
            			MandarMensajeActivity.this,
            			UsuariosActivity.class);
				
				i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				startActivity(i);
			}
		}
	}
}
